package com.uaf.vxalipaybill.provider.action.v1;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.uaf.api.vo.req.BaseReqVo;
import com.uaf.api.vo.resp.BaseRespVo;
import com.uaf.common.json.utils.JsonUtils;
import com.uaf.common.response.utils.ResponseUtils;
import com.uaf.common.security.utils.Md5Utils;
import com.uaf.log.MySlf4j;
import com.uaf.redis.JedisClientTemplate;
import com.uaf.vxalipaybill.api.vo.req.VxAlipayBillAuthReqVo;
import com.uaf.vxalipaybill.api.vo.req.VxAlipayBillMailDeleteReqVo;
import com.uaf.vxalipaybill.api.vo.req.VxAlipayBillQueryReqVo;
import com.uaf.vxalipaybill.api.vo.req.VxAlipayBillReqBeanListReqVo;
import com.uaf.vxalipaybill.api.vo.resp.VxAlipayBillAuthRespVo;
import com.uaf.vxalipaybill.api.vo.resp.VxAlipayBillQueryRespVo;
import com.uaf.vxalipaybill.api.vo.resp.VxAlipayBillReqBeanListRespVo;
import com.uaf.vxalipaybill.provider.config.Config;
import com.uaf.vxalipaybill.provider.service.read.IVxAlipayBillReadService;
import com.uaf.vxalipaybill.provider.service.write.IVxAlipayBillWriteService;
import com.uaf.vxalipaybill.provider.utils.VxAlipayBillConstantUtils;

/**
 * @filename VxAlipayBillAction.java
 * @description 微信支付宝账单
 * @author 马庆智
 * @date 2021/9/6 12:06
 */
@RestController
@RequestMapping("/v1")
public class VxAlipayBillAction {

	@Autowired
	private IVxAlipayBillWriteService vxAlipayBillWriteService;

	@Autowired
	private IVxAlipayBillReadService vxAlipayBillReadService;

	@Autowired
	private JedisClientTemplate jedisClientTemplate;
	@Autowired
	private Config config;

	/**te
	 * 功能描述 微信支付宝账单授权
	 * @param vo 微信支付宝账单请求数据
	 * @return com.uaf.vxalipaybill.api.vo.resp.VxAlipayBillAuthRespVo 返回授权状态
	 * @author 马庆智
	 * @date 2021/9/10 10:11
	 */
	@PostMapping("/vxAlipayAuth")
	public BaseRespVo<VxAlipayBillAuthRespVo> vxAlipayAuth(@RequestBody @Valid BaseReqVo<VxAlipayBillAuthReqVo> vo) {
		/**1.打印参数*/
		MySlf4j.textInfo("微信支付宝账单授权,businessId:{0},请求参数:{1}", vo.getData().getBusinessId(),
				JsonUtils.toJson(vo.getData()));
		/**2.逻辑处理返回结果*/
		VxAlipayBillAuthRespVo vxAlipayBillAuthRespVo = new VxAlipayBillAuthRespVo();
		String key = VxAlipayBillConstantUtils.BILL_REDIS_PREFIX
				.concat(Md5Utils.getMd5(JsonUtils.toJson(vo.getData())));
		if (jedisClientTemplate.exists(key)) {
			vxAlipayBillAuthRespVo.setAuthStatus(VxAlipayBillConstantUtils.STATUS_FAIL);
			return ResponseUtils.responseSuccess(vxAlipayBillAuthRespVo);
		}
		vxAlipayBillAuthRespVo = vxAlipayBillWriteService.vxAlipayAuth(vo);
		jedisClientTemplate.setex(key, 10, "/vxAlipayAuth");
		MySlf4j.textInfo("微信支付宝账单授权,businessId:{0},响应参数:{1}", vo.getData().getBusinessId(),
				JsonUtils.toJson(vxAlipayBillAuthRespVo));
		return ResponseUtils.responseSuccess(vxAlipayBillAuthRespVo);
	}

	/**
	 * 功能描述 微信支付宝账单授权结果查询
	 * @param vo 微信支付宝账单
	 * @return com.uaf.vxalipaybill.api.vo.resp.VxAlipayBillAuthRespVo 授权状态
	 * @author 马庆智
	 * @date 2021/9/14 10:30
	 */
	@PostMapping("/queryVxAlipayAuthResult")
	public BaseRespVo<VxAlipayBillQueryRespVo> queryVxAlipayAuthResult(
			@RequestBody @Valid BaseReqVo<VxAlipayBillQueryReqVo> vo) {
		/**1.打印参数*/
		MySlf4j.textInfo("微信支付宝账单授权结果查询 businessId:{0},请求参数:{1}", vo.getData().getBusinessId(),
				JsonUtils.toJson(vo.getData()));
		/**2.逻辑处理返回结果*/
		VxAlipayBillQueryRespVo vxAlipayBillQueryRespVo = vxAlipayBillReadService.queryVxAlipayAuthResult(vo);
		MySlf4j.textInfo("微信支付宝账单授权结果查询 businessId:{0},响应参数:{1}", vo.getData().getBusinessId(),
				JsonUtils.toJson(vxAlipayBillQueryRespVo));
		return ResponseUtils.responseSuccess(vxAlipayBillQueryRespVo);
	}

	/**
	 * 功能描述 根据身份证号查询微信支付宝账单FileId等值
	 * @param vo
	 * @return com.uaf.vxalipaybill.api.vo.resp.VxAlipayBillReqBeanListRespVo
	 * @author 马庆智
	 * @date 2021/10/13 16:21
	 */
	@PostMapping("/queryVxAlipayReqBeanList")
	public BaseRespVo<VxAlipayBillReqBeanListRespVo> queryVxAlipayReqBeanList(
			@RequestBody @Valid BaseReqVo<VxAlipayBillReqBeanListReqVo> vo) {
		MySlf4j.textInfo("根据身份证号查询微信支付宝账单FileId等值, 请求参数:{0}", JsonUtils.toJson(vo.getData()));
		VxAlipayBillReqBeanListRespVo VxAlipayReqBeanListRespVo = vxAlipayBillReadService
				.queryVxAlipayReqBeanList(vo.getData().getCertNo(), vo.getMerchantId());
		MySlf4j.textInfo("根据身份证号查询微信支付宝账单FileId等值, 响应参数:{0}", JsonUtils.toJson(VxAlipayReqBeanListRespVo));
		return ResponseUtils.responseSuccess(VxAlipayReqBeanListRespVo);
	}

	/**
	 * 功能描述 删除指定天数之前的邮件
	 * @param  vo
	 * @author 马庆智
	 * @date 2021/9/28 14:08
	 */
	@PostMapping("/deleteMailContent")
	public void deleteMailContent(@RequestBody @Valid BaseReqVo<VxAlipayBillMailDeleteReqVo> vo) {
		MySlf4j.textInfo("删除指定天数之前的邮件, 请求参数:{0}", JsonUtils.toJson(vo.getData()));
		vxAlipayBillWriteService.deleteMailContent(vo.getData().getDeleteDay());
		MySlf4j.textInfo("删除指定天数之前的邮件,删除天数为{0},成功执行", vo.getData().getDeleteDay());
	}

}


